package com.daedalus.klasaObjekte.PunonjesProjekt;

import java.util.Scanner;

public class PunonjesDetyra {

	
	public static void main(String[] args) {
		
		Punonjes[] punonjesit;
		Detyra[] detyrat;
		int[][] oret;

		Scanner in = new Scanner(System.in);	//per te lexuar nga tastjera
		int nr_p, nr_det;			            // per numrin e punonjesve dhe detyrave

		System.out.print("Numri i punonjesve: ");	// pyes per nr e punonjesve
		nr_p=in.nextInt();							// ruaj nr e punonjesve
		System.out.print("Numri i detyrave: " );
		nr_det=in.nextInt();							// ruaj nr e detyrave

		// inicializoj vektoret dhe matricen mqs di numrin e elementeve

		oret=new int [nr_p][nr_det];
		detyrat=new Detyra[nr_det];
		punonjesit=new Punonjes[nr_p];

		// mbush te dhenat per punonjesit

		for( int i=0; i<punonjesit.length;i++){
			//lexoj te dhenat nga tastjera

			System.out.print("Emri i punonjesit: ");
			String em=in.next();
			System.out.print("Mbiemri i punonjesit: ");
			String mb=in.next();
			System.out.print("Gjinia e punonjesit: ");
			String gj=in.next();

			//krijoj objektin

			punonjesit[i]=new Punonjes(em,mb,gj);
		}

		// njesoj mbush te dhenat per detyrat
		for( int i=0; i<detyrat.length;i++){
			//lexoj te dhenat nga tastjera
			System.out.println("Emertimi i Detyres : ");
			String em=in.next();

			//krijoj objektin
			detyrat[i]=new Detyra(em);
		}
		
		// mbush te dhenat e detyrave, pra matricen
		for( int i=0; i<oret.length;i++){			// per cdo rresht ( student )
			for( int j=0; j<oret[i].length; j++)		// per cdo lende te ketij stud
			{
				//pyes perdoruesin
				System.out.printf("Punonjesi: %s %s , Detyra: %s "
					,punonjesit[i].getemri(),punonjesit[i].getMbiemri(),detyrat[j].getEmertimi());
				
				// ruaj noten qe jep perdoruesi
				oret[i][j]=in.nextInt();
			}			
		}	

         // printojme matricen e detyrave
        System.out.printf("%-10s"," ");
        for( int i=0; i<detyrat.length;i++){
			System.out.printf(" %-10s",detyrat[i].getEmertimi());
		}
        System.out.println();
        for( int i=0; i<oret.length;i++){			// per cdo rresht ( punonjes )
            System.out.printf("%-10s",punonjesit[i].getemri());
			for( int j=0; j<oret[i].length; j++)		// per cdo detyre te ketij punonjesi
			{
				System.out.printf("%-10d",oret[i][j]);
			}
            System.out.println();
		}
		
/*		ktu fillon pika a - pjesa e dyte
		radhit Detyrat ne rend zbrites
*/
		// marr nje vektor ndihmes qe do e perdor si numerues per oret totale per nje detyre
		int[] oreDetyre=new int[nr_det];

		// numeroj oret totale per cdo detyre
		for (int i=0; i<oreDetyre.length; i++)
			   oreDetyre[i]=orePerDetyre(oret,i);

        //rendit vektorin oreDetyre ne rend rrites dhe bej ndryshimet e duhura ne vektorin Detyrat dhe matricen oret
        for (int i=0; i<oreDetyre.length-1; i++)
            for (int j=i+1;j<oreDetyre.length;j++)
                if (oreDetyre[i]<oreDetyre[j]){
                    //nderroj vendet ne oreDetyre
                    {
                        int temp=oreDetyre[i];
                        oreDetyre[i]=oreDetyre[j];
                        oreDetyre[j]=temp;
                    }
                    //nderroj vendet ne Detyrat
                    {
                        Detyra temp = detyrat[i];
                        detyrat[i]=detyrat[j];
                        detyrat[j]=temp;
                    }
                    //nderroj vendet ne matrice
                    {
                        for(int rreshti=0;rreshti<nr_p;rreshti++){
                            int temp=oret[rreshti][i];
                            oret[rreshti][i]=oret[rreshti][j];
                            oret[rreshti][j]=temp;
                        }
                    }
                }
        //printoj matricen e ndryshuar
        System.out.printf("%-10s"," ");
        for( int i=0; i<detyrat.length;i++){
			System.out.printf(" %-10s",detyrat[i].getEmertimi());
		}
        System.out.println();
        for( int i=0; i<oret.length;i++){			// per cdo rresht ( punonjes )
            System.out.printf("%-10s",punonjesit[i].getemri());
			for( int j=0; j<oret[i].length; j++)		// per cdo detyre te ketij punonjesi
			{
				System.out.printf("%-10d",oret[i][j]);
			}
            System.out.println();
		}
	} // ktu mbaron main
	
	
	// ktu fillon pika b e ushtrimit
	// kemi nje funksion me vete
	//deklarojme funksionin
	
	public static int orePerDetyre(int[][] oret, int detyra){

		//gjej nr e oreve per kete detyre me index detyra
		int nr_ore = 0;   		// si fillim nr i detyrave eshte 0
		
		for (int i=0;i<oret.length; i++)
				nr_ore +=oret[i][detyra];					// rrit me nje nr e detyrave
		
		return nr_ore;
	} // mbaron metoda	

} // mbyllet klasa
